﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Enums;
using Vallejos.Entidades.Enums;
using Vallejos.Entidades.ModeloDeDatos;
using Vallejos.Negocio;

public partial class Productos_Navegacion_BusquedaProductos : System.Web.UI.Page
{
    private const string PaginaDeComparacion = "ComparacionProductos.aspx";

    #region "Eventos De Pagina"
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            CargarRangos();
            CargarCombos();
        }

    }
    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        var negocio = (NegocioFacade)Session[VariablesDeSesion.NegocioFacade.ToString()];

        var producto = new Producto();


        producto.Titulo = txtDescripcion.Text;

        if (ddlTipo.SelectedIndex != 0)
            producto.TipoDeProducto = new TipoProducto { idTipo = (IdTipoProducto)ddlTipo.SelectedIndex };

        if (ddlUso.SelectedIndex != 0)
            producto.Uso = new UsoDeProducto { idUso = (IdUsoDeProducto)ddlUso.SelectedIndex };

        if (ddlMarca.SelectedIndex != 0)
            producto.Marca = new Marca { Id = Convert.ToInt32(ddlMarca.SelectedValue) };

        if (ddlModelo.SelectedIndex != 0)
            producto.Modelo = new Modelo { Id = Convert.ToInt32(ddlModelo.SelectedValue) };

        var desde = Convert.ToInt32(txtDel.Text);
        var hasta = Convert.ToInt32(txtAl.Text);

        var productos = negocio.BuscarProductos(producto, desde, hasta);
        gvProductos.DataSource = productos;
        gvProductos.DataBind();

        btnComparar.Visible = productos.Count > 0;

        Session.Add(VariablesDeSesion.ProductosEnCache.ToString(), productos);
    }

    protected void ddlMarca_SelectedIndexChanged(object sender, EventArgs e)
    {
        CargarModelos(Convert.ToInt32(((DropDownList)sender).SelectedValue));
    }

    #endregion

    #region "Metodos Privados"
    private void CargarRangos()
    {
        txtDel.Text = DateTime.Now.Year.ToString();
        txtAl.Text = DateTime.Now.Year.ToString();

        txtDel_NumericUpDownExtender.Maximum = DateTime.Now.Year;
        txtAl_NumericUpDownExtender.Maximum = DateTime.Now.Year;
    }
    #endregion


    #region Combos
    private void CargarCombos()
    {
        CargarMarcas();
        CargarTiposProducto();
        CargarUsosDeProducto();
    }
    private void CargarMarcas()
    {
        var negocio = (NegocioFacade)Session[VariablesDeSesion.NegocioFacade.ToString()];
        HelperUI.CargarLista(ddlMarca, negocio.LeerMarcas(),
            "Id", "Nombre");
        CargarModelos(0);
    }
   

    private void CargarTiposProducto()
    {
        var negocio = (NegocioFacade)Session[VariablesDeSesion.NegocioFacade.ToString()];
        HelperUI.CargarLista(ddlTipo, negocio.LeerTiposProducto(),
            "idTipo", "Nombre");
    }

    private void CargarUsosDeProducto()
    {
        var negocio = (NegocioFacade)Session[VariablesDeSesion.NegocioFacade.ToString()];
        HelperUI.CargarLista(ddlUso, negocio.LeerUsosDeProducto(),
            "idUso", "Nombre");
    }


    private void CargarModelos(int idMarca)
    {
        var negocio = (NegocioFacade)Session[VariablesDeSesion.NegocioFacade.ToString()];
        HelperUI.CargarLista(ddlModelo, negocio.LeerModelos(idMarca),
            "Id", "Nombre");
    }
    #endregion
    protected void btnComparar_Click(object sender, EventArgs e)
    {
        var productos = (List<Producto>)Session[VariablesDeSesion.ProductosEnCache.ToString()];
        var productoParaComparar = (from GridViewRow row in gvProductos.Rows let chk = (CheckBox) row.FindControl("chkComparacion") 
                                    where ((CheckBox) row.FindControl("chkComparacion")).Checked 
                                    select productos.Single(prod => prod.Id == Convert.ToInt32(chk.CssClass))).ToList();

        Session.Add(VariablesDeSesion.ProductosEnCache.ToString(), productoParaComparar);
        var negocio = (NegocioFacade)Session[VariablesDeSesion.NegocioFacade.ToString()];
        
        Response.Redirect(PaginaDeComparacion);
    }
}